package com.yjzx.util.common.util.file;

import java.io.File;
import java.util.List;
import java.util.jar.JarFile;

/**
 * @author guozhi
 * @date 2024/9/11
 * @description ClassLoadClasses
 */
public interface ClassLoadClasses {
    String ROOT_PATH = System.getProperty("user.dir");
    String SPOT = ".";
    /**
     * 查找指定包下的所有类。
     *
     * @param packageName 包名
     * @return 包含所有类的列表
     */
    List<Class<?>> findClassesInPackage(String packageName);

    /**
     * 查找指定包下的指定类的子类
     * @param packageName 包名
     * @param clazz 类型
     * @param <T>
     * @return
     */
    <T> List<Class<? extends T>> findClassesInPackage(String packageName, Class<T> clazz);
    /**
     * 递归加载目录下的所有类。
     *
     * @param directory   目录
     * @param packageName 包名
     */
    <T> List<Class<? extends T>> loadClassesInDirectory(File directory, String packageName, Class<T> aClass);
    /**
     * 加载 JAR 文件中的所有类。
     *
     * @param jarFile     JAR 文件
     * @param packageName 包名
     */
    <T>List<Class<? extends T>> loadClassesInJar(JarFile jarFile, String packageName, Class<T> aClass);
}
